package cn.cxq.learning.string_matching;

import org.junit.jupiter.api.Test;

/**
 * 剑指offer
 * 把字符串转换成整数 相似的企业真题
 * 时间限制：C/C++ 1秒，其他语言2秒 空间限制：C/C++ 64M，其他语言128M 热度指数：473493
 * 本题知识点： 字符串 数学 字符串
 *  算法知识视频讲解
 * 题目描述
 * 将一个字符串转换成一个整数，要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0
 * 输入描述:
 * 输入一个字符串,包括数字字母符号,可以为空
 * 返回值描述:
 * 如果是合法的数值表达则返回该数字，否则返回0
 * 示例1
 * 输入
 * 复制
 * "+2147483647"
 * 返回值
 * 复制
 * 2147483647
 * 示例2
 * 输入
 * 复制
 * "1a33"
 * 返回值
 * 复制
 * 0
 */
public class StrToInt {

    public int StrToInt(String str) {
        boolean matches = str.matches("[+-]?\\d+");
        if (!matches) {
            return 0;
        } else {
            int temp = 1;
            int index = str.length()-1;
            int result = 0;

            if (str.matches("\\d+")){
                while (index >= 0) {
                    result += (str.charAt(index--) - 48) * temp;
                    temp*=10;
                }
            } else {
                while (index > 0) {
                    result += (str.charAt(index--) - 48) * temp;
                    temp*=10;
                }
                if (str.charAt(index) == '-') {
                    result = -result;
                }
            }


            return result;
        }
    }

    @Test
    public void test(){
        System.out.println(StrToInt("23243"));
    }
}
